package com.basker.pisces.trace.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.basker.pisces.trace.Span;

/**
 * 启用跟踪的标记
 * <p>
 * 这个注解是一个hint，只是标记作用
 *
 * @author hangwen
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
public @interface EnableTrace {

    /**
     * 接口映射的行为，当配置成${key}的格式时，从资源文件获取，为空则取当前方法签名
     *
     * @return
     * @see Span#getName()
     */
    String action() default "";

    /**
     * 跟踪的事件
     *
     * @return
     * @see TraceEvent
     */
    TraceEvent[] events() default TraceEvent.DataWrite;

    /**
     * 跟踪的目标
     *
     * @author hangwen
     * @see EnableTrace
     */
    public static enum TraceEvent {

        /**
         * 数据写入数据库的时间
         */
        DataWrite

    }

}
